StupidBeauty
Read times:2444Posted at: - no title specified

概述

这是一个异步的基于回调函数的安卓 Http客户端 ,底层使用的是 Apache 的 HttpClient 库。所有 的请求都是 在妳的程序中主界面线程之外的线程中发起的,但是,所有 的回调逻辑都是使用安卓 处理器 (Handler)消息传递机制来在创建该回调对象的相同线程中执行的。 妳还可以 服务 (Service)或者后台线程中使用它, 这个库会自动识别自己是运行于哪个上下文中。

特性

  • •. 发起 异步 HTTP请求, 并在 匿名回调对象 中处理回复内容

  • •. HTTP请求 在界面线程之外 发生的

  • •. 所有 的请求会使用 线程 来限制并发的资源使用程度

  • •. GET/POST 参数构建 (RequestParams)

  • •. 无需第三 方库即可支持 多部分的( Multipart )文件上传

  • •. 无需第三 方库即可支持 流式 JSON 上传

  • •. 可处理循环重定向及相对重定向

  • •. 只会给妳的程序增加一点点尺寸, 库的所有东西加起来才 90kb

  • •. 针对 极不稳定的移动网络,自动进行智能 请求重试

  • •. 自动进行 gzip 回复内容 的解码,支持超快的请求

  • •. 使用 BinaryHttpResponseHandler 支持二进制协议通信

  • •. 使用 JsonHttpResponseHandler 提供 了内置的 JSON 解析功能

  • •. 使用 FileAsyncHttpResponseHandler 将回复内容直接保存到文件中

  • •. 持久 化小甜饼( cookie )存储 ,会将小甜饼存储到妳的程序的 共享首选项 (SharedPreferences)里

  • •. 使用 BaseJsonHttpResponseHandler ,可与 Jackson JSON Gson 或别的 JSON序列 化(反序列化)库整合起来

  • •. 使用 SaxAsyncHttpResponseHandler 支持SAX 解析

  • •.支持不同的语言及内容编码方式,不仅仅是UTF-8

安装及基本用法

使用Gradle 构建脚本格式来添加maven 依赖

dependencies {

compile 'com.loopj.android:android-async-http:1.4.5'

}

导入http包。

import com.loopj.android.http.* ;

创建 一个新的 AsyncHttpClient 实例, 发起一个请求:

AsyncHttpClient client = new AsyncHttpClient ();

client . get ( "http://www.google.com" , new AsyncHttpResponseHandler () {

@Override

public void onStart () {

// 在请求开始之前会调用这个方法

}

@Override

public void onSuccess ( int statusCode , Header [] headers , byte [] response ) {

// 当回复的 HTTP状态 码是 "200 OK" 时会调用这个方法

}

@Override

public void onFailure ( int statusCode , Header [] headers , byte [] errorResponse , Throwable e ) {

// 当回复的 HTTP状态 码是 "4XX" (例如401 403 404) 时会调用这个方法

}

@Override

public void onRetry ( int retryNo ) {

// 当该请求进行了重试时会调用这个方法

}

});

建议的用法:创建一个静态的Http客户端

在这个示例里,我们会创建一个带有静态访问函数的http客户端类,这样就能够轻松地与 推特 (Twitter)的应用编程接口进行通信。

import com.loopj.android.http.* ;

public class TwitterRestClient {

private static final String BASE_URL = "http://api.twitter.com/1/" ;

private static AsyncHttpClient client = new AsyncHttpClient ();

public static void get ( String url , RequestParams params , AsyncHttpResponseHandler responseHandler ) {

client . get ( getAbsoluteUrl ( url ), params , responseHandler );

}

public static void post ( String url , RequestParams params , AsyncHttpResponseHandler responseHandler ) {

client . post ( getAbsoluteUrl ( url ), params , responseHandler );

}

private static String getAbsoluteUrl ( String relativeUrl ) {

return BASE_URL + relativeUrl ;

}

}

然后,就可以在妳的代码中轻易地使用推特的应用编程接口了:

import org.json.* ;

import com.loopj.android.http.* ;

class TwitterRestClientUsage {

public void getPublicTimeline () throws JSONException {

TwitterRestClient . get ( "statuses/public_timeline.json" , null , new JsonHttpResponseHandler () {

@Override

public void onSuccess ( int statusCode , Header [] headers , JSONObject response ) {

// 如果回复结果 是一个 JSONObject ,而不是预期的 JSONArray 的话则会调用这个方法

}

@Override

public void onSuccess ( int statusCode , Header [] headers , JSONArray timeline ) {

// 从公共时间线中解析出第一个事件

JSONObject firstEvent = timeline . get (0);

String tweetText = firstEvent . getString ( "text" );

// 对于回复内容 做一些处理

System . out . println ( tweetText );

}

});

}

}

参考 AsyncHttpClient RequestParams AsyncHttpResponseHandler 的Javadoc以了解更多细节。

使用 FileAsyncHttpResponseHandler 来下载二进制数据

FileAsyncHttpResponseHandler 类可用来获取二进制数据,例如图片和其它文件。例如:

AsyncHttpClient client = new AsyncHttpClient ();

client . get ( "http://example.com/file.png" , new FileAsyncHttpResponseHandler () {

@Override

public void onSuccess ( int statusCode , Header [] headers , File response ) {

// 针对文件`response` 做一些处理

}

});

参考 FileAsyncHttpResponseHandler Javadoc 以了解更多信息。

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands